[レポート] 「CircleCI で OIDC を使って上手に自動化/失敗させる」で認証情報を持たない AWS 連携を #devio2022
AWS をデプロイ先として CI/CD を組む際の困りごとのひとつとして、認証情報、つまり AWS のアクセスキー/シークレットキーなどをどう持つかという問題がひとつあるかなと思います。
先月行われたクラスメソッド主催イベント「DevelopersIO 2022」にて、CircleCI による OIDC(OpenID Connect)による解決方法を説明するセッションがありましたのでレポートします。
なお DevelopersIO 2022 の他のセッションは以下からアクセスください。
弊社パートナー企業の方々に登壇頂いたセッションについては、こちらのまとめ記事もご参照下さい。
スピーカー
- 舟木将彦氏
- Principal Developer Advocate, CircleCI
- @mfunaki / Twitter
内容
- 0:37 アジェンダ
- 1:20 CI/CD とシークレットとの関係
- 特に AWS などクラウドと連携する際の話
- 3:06 AWS シークレットを保持しない〜OIDC
- 5:22 ID Provider - Project - Role - Policy
- 12:10 おわりに
CI/CD とシークレットとの関係
- そもそも CI/CD ツールとは
- Git リポジトリに Push されたことで CircleCI へ Webhook が送られて、
- CircleCI がビルド、そのあと AWS へデプロイされる
- 要点:
- Git へ push したユーザーが AWS へデプロイするわけではない
- AWS へは CI/CD ツールが保持しているアカウントを使う
- (前提として)CircleCI では環境変数として保持可能
- プロジェクト単位 or 組織内で共有可能なコンテキスト
- HashiCorp Vault で暗号化
- 更新やローテーションは API や UI から実施
- (とはいえ、可能ではあるが)そもそも保持したくない
AWS シークレットを保持しない〜OIDC
- なぜ?
- 1: そもそも置きたくない(置くのであれば定期的にローテーションしたい)
- 漏洩リスクに対処
- 2: 権限を使い回したくない
- 本来、複数の開発者がいれば権限はそれぞれ異なる
- コミットしたユーザーによって処理を振り分けたい
- 例)
- 特定の開発者だけが公開できるようにした
- 開発者はプレビューのみ、公開しようとすると権限不足エラーにしたい
- 1: そもそも置きたくない(置くのであれば定期的にローテーションしたい)
- CircleCI で OIDC(OpenID Connect)がサポート
- 2022 年 3 月
- 当初のリリース予定からずれ込んだ
- Orb でも対応
- 上述の問題を解決出来る!
- 参考 :
ID Provider - Project - Role - Policy
- 1: 信頼関係を構築
- AWS に CircleCD の ID プロバイダの URL を設定(IAM)
- 2: JWT を付与
- JWT = JSON Web Token
- プロジェクト ID
- ユーザー ID
- ユーザー ID によって許可する操作が異なる
- 4: JWT のクレーム内容に基づき認可
- AWS 上のロールの話
deploy
用とpreview
用の 2 つのロールを用意- ID プロバイダには前述(1:)の ARN を指定
- 信頼ポリシー
deploy
は特定のユーザー ID のリクエストからのみ実行可能
- AWS 上のロールの話
- 5: JWT のクレーム内容に基づくポリシー付与
deploy
用とpreview
用- それぞれ別の S3 バケットを用意し権限付与
- CircleCI のコンフィグレーション
- ワークフロー
deploy
とpreview
の 2 つのジョブを記述(YAML)- Git のブランチ名を指定
- ジョブ
deploy
とpreview
- それぞれの IAM ロールの ARN を付与
- つまり
- ジョブの実行には、ARN のロール付与の条件に合致したユーザーからのリクエストである必要がある
deploy
権限のないユーザのpreview
は成功、deploy
は失敗
- ワークフロー
まとめ : CircleCI と AWS が OIDC 認証でできること
- CircleCI には無償プランあり
- オンラインサインアップ
- linux の Docker 環境 --> 無償プランでも 3,000min 相当のクレジットが使える
- 1 日 2.5h のビルド・テスト・デプロイが可能(月 20 日換算)
- 日本語サポートも
- オンラインサインアップ
- あなたの言いなりになって実行してくれる CircleCI をご活用ください(原文ママ
所感とまとめ
今年の 3 月にリリースされた CircleCI の OIDC 機能について、15 分ほどでコンパクトに説明頂きました。
CI/CD 環境に限らず、AWS の認証情報は扱いに慎重さが求められます。幸い最近はこの例のように、より安全に AWS との連携・インテグレーションを行う機能が充実してきていますので、高くアンテナを張りつつ本来不要なトラブルを未然に回避出来る構成にアップデートしていきたいですね!